#include<cstdio>
#include<queue>
using namespace std;
int vtc[6]={1,-1,0,0,0,0};
int hor[6]={0,0,1,-1,0,0};
int hig[6]={0,0,0,0,1,-1};
int M,N,L,T;

int inp[1300][130][80];
bool vis[1300][130][80];
int cnt=0;
struct node{
    int x;
    int y;
    int z;
    node(int x,int y,int z):x(x),y(y),z(z){}
    node(){}
};
bool rejudge(node a){
    if(a.x<0 || a.x>=M || a.y<0 ||a.y>=N || a.z<0 || a.z>=L)return false;
    if(inp[a.x][a.y][a.z]==0 || vis[a.x][a.y][a.z]==true)return false;
    return true;
}
void BFS(node a){
    int anscnt=0;
    queue<node> que;
    while(!que.empty())que.pop();
    que.push(a);
    vis[a.x][a.y][a.z]=true;
    while(!que.empty()){
        node tmp=que.front();
        que.pop();
        anscnt++;
        for(int i=0;i<6;i++){
            node anstemp=node{tmp.x+vtc[i],tmp.y+hor[i],tmp.z+hig[i]};
            if(rejudge(anstemp)){
                vis[anstemp.x][anstemp.y][anstemp.z]=true;
                que.push(anstemp);
            }
        }
    }
    if(anscnt>=T){cnt+=anscnt;}
    return;
}
int main(){
    //freopen("in.txt","r",stdin);

    scanf("%d %d %d %d",&M,&N,&L,&T);
    int temp;
    for(int i=0;i<L;i++){
        for(int j=0;j<M;j++){
            for(int k=0;k<N;k++){
                scanf("%d",&inp[j][k][i]);
            }
        }
    }
    for(int i=0;i<L;i++){
        for(int j=0;j<M;j++){
            for(int k=0;k<N;k++){
                if(inp[j][k][i]==1 && vis[j][k][i]==false){
                    BFS(node{j,k,i});
                }
            }
        }
    }
    printf("%d\n",cnt);
}
